/*
 * 主配置文件
 *
 */
const utils = require("./build/newUtils");
const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i;
const path = require("path");
const CompressionPlugin = require("compression-webpack-plugin");
const debug = process.env.NODE_ENV !== "production";
const version = new Date().toLocaleString()
function resolve(dir) {
	return path.join(__dirname, dir);
}
let indexPage = process.env.LOCAL_EVN === 'all' ? '*' : process.env.LOCAL_EVN
indexPage = indexPage === 'custManager' ? 'customer' : indexPage
let pageArray = [`./src/_MUlTIPAGES/**/${indexPage}.html`];
var pages = utils.getEntry(pageArray);
// process.env.VUE_APP_VERSION = new Date()
// var pages = utils.getEntry(['./src/_MUlTIPAGES/**/*.html']);
var mpages = utils.getEntryPages(pages);
// const cssExtract = undefined;
module.exports = {
	lintOnSave: false,
	//  publicPath: '/custManager',
	// outputDir: 'custManager[生产环境]',
	// publicPath: "/orders",
	// outputDir: "orders",
	// // assetsDir: 'static',
	publicPath:  process.env.LOCAL_EVN === 'all'?'/':`/${process.env.LOCAL_EVN}`,
	outputDir: process.env.LOCAL_EVN === 'all'?'dist':process.env.LOCAL_EVN,
	pages:
	process.env.LOCAL_EVN == "all"
			? Object.assign(mpages, {
					index: "./src/main.js", // 配置主入口文件（会生成 app.html，elerem cli3并没有提供直接配置入口文件的选项）
			  })
			: mpages,
	css: {
		//elerem 文件中修改css 不生效 注释掉  extract:true
		sourceMap: true,
		loaderOptions: {
			sass: {
				prependData: `@import "./src/styles/index";`,
			},
		},
	},
	/**
	 * 生产环境是否生成 sourceMap 文件, 可调试代码
	 * 如果你不需要生产环境的 source map，可以将其设置为 false 以加速生产环境构建。
	 * */
	productionSourceMap: false,
	devServer: {
		host: "127.0.0.1", // 设置启动项目网址
		// port: 8088, // 设置启动项目端口号
		// https: false, // 是否使用https协议
		open: true, // 设置是否自动打开浏览器
		hotOnly: false, // 是否开启热更新
		//以上的ip和端口是我们本机的;下面为需要跨域的
		proxy: {
			//配置跨域
			"^/api": {
				target: "http://172.16.1.230:8000",
				changeOrigin: true,
				pathRewrite: {
					"^/api": "",
				},
			},
			"^/sso": {
				target: "http://172.16.1.230:8000",
				changeOrigin: true,
			},
		},
	},
	configureWebpack: {
		name: "电信CMR3.0",
	},
	chainWebpack(config) {
		if (debug) {
			// 开发环境配置
		} else {
			// 生产环境配置
			// 启用GZip压缩
			config
				.plugin("compression")
				.use(
					new CompressionPlugin({
						filename: "[path].gz[query]",  //压缩后的文件策略
						algorithm: "gzip",
						test: productionGzipExtensions, // 匹配文件名
						threshold: 10240, // 处理小于10k文件
						minRatio: 0.8, // 只有压缩率比这个值小的资源才会被处理
						deleteOriginalAssets: false, // 是否删除原资源
					})
				)
				.end()
		}
		config.module.rule("svg").exclude.add(resolve("./src/assets/icons/svg"));
		config.module
			.rule("icons")
			.test(/\.svg$/)
			.include.add(resolve("./src/assets/icons/svg"))
			.end()
			.use("svg-sprite-loader")
			.loader("svg-sprite-loader")
			.options({ symbolId: "icon-[name]" });

		config.plugin('define')
		.tap(args => {
		  args[0]['process.env'].LOCAL_EVN = JSON.stringify(process.env.LOCAL_EVN);
		  args[0]['process.env'].VERSION = JSON.stringify(version);
		  return args;
		});
	
		/**
		 * 覆盖 Webpack 配置
		 * Vue Cli4 配置了 mini-css-extract-plugin 的 publicPath ，对相对路径进行了特定处理，但却没有考虑多层级页面的情况。
		 * 配置css中 图片资源路径也为 publicPath
		 */
		// const isProd = process.env.NODE_ENV === 'production';
		// const extract = cssExtract || isProd;
		// const shadowMode = !!process.env.VUE_CLI_CSS_SHADOW_MODE;
		// const shouldExtract = extract !== false && !shadowMode;
		//  if (shouldExtract) {
		//    [
		//      {lang: 'css', test: /\.css$/},
		//      {lang: 'postcss', test: /\.p(ost)?css$/},
		//      {lang: 'scss', test: /\.scss$/},
		//      {lang: 'sass', test: /\.sass$/},
		//      {lang: 'less', test: /\.less$/},
		//      {lang: 'stylus', test: /\.styl(us)?$/},
		//    ].forEach(({lang, test}) => {
		//      const baseRule = config.module.rule(lang).test(test);
		//      [
		//        // rules for <style lang="module">
		//        baseRule.oneOf('elerem-modules').resourceQuery(/module/),
		//        // rules for <style>
		//        baseRule.oneOf('elerem').resourceQuery(/\?elerem/),
		//        // rules for *.module.* files
		//        baseRule.oneOf('normal-modules').test(/\.module\.\w+$/),
		//        // rules for normal CSS imports
		//        baseRule.oneOf('normal'),
		//      ].forEach(rule => {
		//        rule.use('extract-css-loader')
		//          .loader(require('mini-css-extract-plugin').loader)
		//          .options({
		//            hmr: !isProd,
		//          });
		//      });
		//    });
		//  }
		// 常用alias
		//  config.resolve.alias
		//    .set('@', resolve('src'))
		//    .set('@assets', resolve('src/assets'))
		//  config
		//    .plugin('webpack-bundle-analyzer')
		//    .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
		config.performance.set("hints", false);
	},
};
